Demote private Make/Mise targets and fix xterm dimensions TypeError#15
Merged
MelbourneDeveloper merged 9 commits intomainfrom Apr 19, 2026
Merged
Demote private Make/Mise targets and fix xterm dimensions TypeError#15MelbourneDeveloper merged 9 commits intomainfrom
MelbourneDeveloper merged 9 commits intomainfrom
Conversation
… tasks and check the muted rendering
# TLDR; It treats Make and Mise private tasks more like users expect. _-prefixed tasks are grouped below public tasks, separated by a divider, and visually de-emphasized. For Makefiles, help is prioritized to the top and .PHONY targets are preferred ahead of non-phony targets, while dot-prefixed special targets and % pattern rules remain hidden. Closes #13 # Details For Make and Mise: - _-prefixed tasks are recognized as private/internal - private tasks are sorted below public tasks - a divider is inserted between public and private groups - private tasks are rendered with a muted icon treatment and marked as private in the item description For Make specifically: - .PHONY declarations are parsed during discovery - discovered Make targets now carry phony metadata - help is pinned to the top of the Make group - phony public targets sort ahead of non-phony public targets - dot-prefixed special targets such as .PHONY and .DEFAULT remain hidden - % pattern rules remain hidden - The result is a tree that better reflects common GNU Make and Mise conventions, reduces accidental clicks on internal tasks, and makes the primary entry points easier to scan. # How do the tests prove the change works The E2E coverage in src/test/e2e/treeview.e2e.test.ts exercises the rendered tree, not just internal helpers. The `Private Make And Mise Tasks` tests create temporary Make and Mise files and verify that: - public tasks appear before private _ tasks - a divider row appears between the groups - private tasks are still present after the divider - private tasks use the muted icon styling The `Make Target Conventions` test verifies that: - help is first - phony public targets sort before non-phony public targets - private targets appear below the divider - % pattern rules are hidden - dot-prefixed special targets are hidden
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TLDR;
Closes #13. Make and Mise targets prefixed with
_are now sorted below public targets, separated by a divider, and rendered with a muted icon/label plus a "private" description marker. Also fixes an intermittent xtermdimensionsTypeError by waiting for the shell process to spawn beforesendText.Details
What Was Added
src/tree/PrivateTaskDecorationProvider.ts— newFileDecorationProviderregistered on thecommandtree-privateURI scheme that paints private-task labels withdescriptionForeground. ExportsbuildPrivateTaskUri(taskId).src/models/TaskItem.ts—isPrivateTask,isPhonyTaskhelpers, an optionalisPhonyflag onCommandItem/MutableCommandItem, andresourceUrisupport onCommandTreeItem(extracted intoapplyOptionalPropsto keep the constructor lean).src/discovery/make.ts—.PHONY:parser (parsePhonyTargets, with line-continuation support) that tags targets withisPhony: true.src/tree/nodeFactory.ts—createTaskNodes(tasks)groups tasks and injects acreateDividerNodebetween the last public task and the first private one. Private tasks get a mutedThemeIcon, a privateresourceUri, and aprivatemarker appended to their description.src/CommandTreeProvider.ts— comparatorscomparePrivateTasks,compareHelpTasks,comparePhonyTasks,compareMakeTaskPrioritylayered into all three sort modes (folder, type, name). Private tasks sort last;helppins to the top of Make targets; phony targets come before non-phony ones.src/test/e2e/treeview.e2e.test.ts:Private Make And Mise Tasks— writes fixtureMakefileandmise.tomlwith mixed public/private targets, asserts divider position, ordering,descriptioncontainsprivate, icon colordescriptionForeground, andresourceUri.scheme === "commandtree-private".Make Target Conventions— assertshelpis pinned first, phony public targets outrank non-phony ones, and pattern rules (%.o) / dot-prefixed special targets (.DEFAULT) stay hidden.What Was Changed
src/runners/TaskRunner.ts—SHELL_INTEGRATION_TIMEOUT_MSraised from 50 ms to 500 ms and the fallback path now awaitsterminal.processIdbefore callingsendText, avoiding the xtermdimensionsTypeError when the viewport hasn't been laid out yet. Added exhaustivenever-typeddefaultbranch informatParamValue.src/extension.ts— registersPrivateTaskDecorationProviderviavscode.window.registerFileDecorationProvider; returnsundefinedexplicitly when there's no workspace root.src/discovery/docker.ts— destructuring cleanup inparseDockerComposeServices.src/test/e2e/execution.e2e.test.ts—runInCurrentTerminaltests now (a) write a marker file via the shell and assert the file exists + contains the echoed text (proves the command actually ran, not just that a terminal appeared), (b) watch VS Code'srenderer.logand assert nodimensions/TypeErrorlines are written during the command, (c) assert the active terminal name and exit status. Timeouts bumped to 20 s to match the longer shell-integration wait..claude/skills/*/SKILL.md),.github/workflows/ci.yml,Makefile,coverage-thresholds.json,eslint.config.mjs,Agents.md,Claude.md,.vscode/extensions.json,tools/check-coverage.mjs— repo-standards polish bundled in.What Was Deleted
Nothing of substance deleted from runtime code — some destructuring simplifications and one
allowed-toolsline removed fromsubmit-prSKILL frontmatter.How Tests Prove It Works
src/test/e2e/treeview.e2e.test.ts::Private Make And Mise Tasks::make private targets sort after public ones and render muted— asserts folder children are[alpha_public, zeta_public, ─────, _beta_private, _omega_private], each private item hasdescriptioncontainingprivate, iconThemeColor.id === "descriptionForeground", andresourceUri.scheme === "commandtree-private"....::mise private tasks sort after public ones and render muted— same assertions formise.toml....::Make Target Conventions::make help is pinned to the top, phony targets sort before non-phony ones, and special targets stay hidden— asserts folder children are[help, build, aaa_file, ─────, _private]and%.o/.DEFAULTare absent.src/test/e2e/execution.e2e.test.ts::runInCurrentTerminal creates terminal when none existsand...reuses existing active terminal— assert the marker file is written andrenderer.logcontains zerodimensions/TypeErrorlines during the run, provingsendTextno longer hits the xterm layout race.Spec/Doc Changes
.claude/skills/*/SKILL.mdupdated to referencemake test(fail-fast + coverage threshold) and the repo's actual Make targets — no behaviour spec changes.Breaking Changes
None. New data (
isPhony,resourceUri, divider node,commandtree-privateURI scheme) is additive. Sort order changes are a UX improvement within existing sort modes and do not alter any public API.🤖 Generated with Claude Code